project(
    'libvfio-user',
    'c',
    version: '0.0.1',
    license: 'BSD-3-Clause',
    meson_version: '>= 0.53.0',
    default_options: [
        'buildtype=debug',
        'c_std=gnu99',
        'warning_level=2',
        # clang with dwarf-5 can break valgrind
        'c_args=-gdwarf-4',
    ],
)

opt_rpath = get_option('rpath')
opt_tran_pipe = get_option('tran-pipe')
opt_debug_logs = get_option('debug-logs')
opt_sanitizers = get_option('b_sanitize')
opt_debug = get_option('debug')
opt_shadow_ioeventfd = get_option('shadow-ioeventfd')

cc = meson.get_compiler('c')

prefix = get_option('prefix')
libdir = prefix / get_option('libdir')

if prefix == '/usr' and not opt_rpath.enabled()
    rpathdir = ''
else
    rpathdir = libdir
endif

thread_dep = dependency('threads')
dl_dep = cc.find_library('dl', required: true)

json_c_version = '0.11'
json_c_dep = dependency('json-c', version: '>=' + json_c_version)

cmocka_version = ''
cmocka_dep = dependency('cmocka', version: '>=' + cmocka_version)


pytest = find_program('pytest-3', required: false)
flake8 = find_program('flake8', required: false)
rstlint = find_program('restructuredtext-lint', required: false)
valgrind = find_program('valgrind', required: false)

common_cflags = [
    '-D_GNU_SOURCE',
]

if opt_debug
    common_cflags += '-Werror'
endif

if opt_debug_logs.enabled() or (not opt_debug_logs.disabled() and opt_debug)
    common_cflags += ['-DDEBUG']
endif

if opt_shadow_ioeventfd
    common_cflags += ['-DSHADOW_IOEVENTFD']
endif

if get_option('warning_level') == '2'
    # -Wall is set for 'warning_level>=1'
    # -Wextra is set for 'warning_level>=2'
    common_cflags += cc.get_supported_arguments([
        '-Wno-missing-field-initializers',
        '-Wmissing-declarations',
        '-Wwrite-strings',
    ])
endif

subdir('include')
subdir('lib')
subdir('samples')
subdir('test')
subdir('docs')
